package ninth.线程操作的相关方法;

/**
 * 在线程操作中可以用 join()方法让一个线程强制运行。在线程强制运行期间，其他线程无法运行，必须等待此线程完成之后才可以继续执行
 */

class MyThread1 implements Runnable{
    @Override
    public void run() { //循环50次 输出线程名称
        for (int i = 0; i <50 ; i++) {
            System.out.println(Thread.currentThread().getName()+"运行 --> "+i);   //输出线程名称
        }
    }
}
public class 线程的强制运行 {
    public static void main(String[] args) {
        MyThread1 mt = new MyThread1(); //实例化线程
        Thread t = new Thread(mt, "线程");    //实例化Thread线程
        t.start();//启动线程
        for (int i = 0; i <50 ; i++) {
            if(i>10){
                try {
                    t.join();   //线程t强制运行
                } catch (InterruptedException e)  {}//需要进行异常处理
            }
            System.out.println("Main线程运行 --> "+i);
        }
    }
}

/**
 * 读者自行实验之后可以发现 此后所有的输出都将由一个线程完成 主线程必须等待这个线程完成之后才会继续执行
 * 但是我自己不理解
 * 然后GPT得：
 * 这句话的意思是，当主线程执行到t.join()时，主线程会等待子线程t执行完毕后再继续执行。在这个例子中，
 * 主线程会在i大于10时等待子线程t执行完毕，然后才会继续输出"Main线程运行 --> "+i。
 * 这样，所有的输出都将由一个线程完成，即子线程t。
 *
 * 此后说的是从他t>10开始 主线程开始等待t这个线程完成之后才会继续运行
 *
 */

/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=55093:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 ninth.线程操作的相关方法.线程的强制运行
Main线程运行 --> 0
Main线程运行 --> 1
Main线程运行 --> 2
Main线程运行 --> 3
Main线程运行 --> 4
Main线程运行 --> 5
Main线程运行 --> 6
Main线程运行 --> 7
Main线程运行 --> 8
Main线程运行 --> 9
Main线程运行 --> 10
线程运行 --> 0
线程运行 --> 1
线程运行 --> 2
线程运行 --> 3
线程运行 --> 4
线程运行 --> 5
线程运行 --> 6
线程运行 --> 7
线程运行 --> 8
线程运行 --> 9
线程运行 --> 10
线程运行 --> 11
线程运行 --> 12
线程运行 --> 13
线程运行 --> 14
线程运行 --> 15
线程运行 --> 16
线程运行 --> 17
线程运行 --> 18
线程运行 --> 19
线程运行 --> 20
线程运行 --> 21
线程运行 --> 22
线程运行 --> 23
线程运行 --> 24
线程运行 --> 25
线程运行 --> 26
线程运行 --> 27
线程运行 --> 28
线程运行 --> 29
线程运行 --> 30
线程运行 --> 31
线程运行 --> 32
线程运行 --> 33
线程运行 --> 34
线程运行 --> 35
线程运行 --> 36
线程运行 --> 37
线程运行 --> 38
线程运行 --> 39
线程运行 --> 40
线程运行 --> 41
线程运行 --> 42
线程运行 --> 43
线程运行 --> 44
线程运行 --> 45
线程运行 --> 46
线程运行 --> 47
线程运行 --> 48
线程运行 --> 49
Main线程运行 --> 11
Main线程运行 --> 12
Main线程运行 --> 13
Main线程运行 --> 14
Main线程运行 --> 15
Main线程运行 --> 16
Main线程运行 --> 17
Main线程运行 --> 18
Main线程运行 --> 19
Main线程运行 --> 20
Main线程运行 --> 21
Main线程运行 --> 22
Main线程运行 --> 23
Main线程运行 --> 24
Main线程运行 --> 25
Main线程运行 --> 26
Main线程运行 --> 27
Main线程运行 --> 28
Main线程运行 --> 29
Main线程运行 --> 30
Main线程运行 --> 31
Main线程运行 --> 32
Main线程运行 --> 33
Main线程运行 --> 34
Main线程运行 --> 35
Main线程运行 --> 36
Main线程运行 --> 37
Main线程运行 --> 38
Main线程运行 --> 39
Main线程运行 --> 40
Main线程运行 --> 41
Main线程运行 --> 42
Main线程运行 --> 43
Main线程运行 --> 44
Main线程运行 --> 45
Main线程运行 --> 46
Main线程运行 --> 47
Main线程运行 --> 48
Main线程运行 --> 49

Process finished with exit code 0

 */